package edu.wust;

import static java.lang.String.*;

public class exam41 {
    public static void change(int[] arr){
        int index1=0,index2=0;
        for(int i=arr.length-2;i>=0;i--){
            if(arr[i]<arr[i+1]){
                index1=i;
                break;
            }
        }
        for(int i=arr.length-1;i>=0;i--){
            if(arr[i]>arr[index1]){
                index2=i;
                break;
            }
        }
        swap(arr,index1,index2);
        range(arr,index1+1);
    }
    public static void range(int[] arr,int n){
        for(int i=n;i<arr.length-1;i++){
            for(int j=n;j<arr.length-1;j++){
                if(arr[j]>arr[j+1]){
                    swap(arr,j,j+1);
                }
            }
        }
    }
    public static void swap(int[] n,int x,int y){
        int temp=n[y];
        n[y]=n[x];
        n[x]=temp;
    }

//上面是全排序算法


    public static boolean isPrime(int num){
        if(num<2)
            return false;
        if(num==2)
            return true;
        int temp=(int)Math.sqrt(num);
        for(int i=2;i<=temp;++i){
            if(num%i==0)
                return false;
        }
        return true;
    }
    public static boolean pandigital(int num){
        String s=valueOf(num);
        int len=s.length();
        int[] arr=new int[10];
        for(int i=0;i<len;++i){
            arr[s.charAt(i)-'0']=1;
        }
        for(int i=1;i<=len;i++){
            if(arr[i]==0)
                return false;
        }
        return true;
    }
    public static void prin(int[] arr){
        for(int x:arr)
            System.out.print(x);
        System.out.println();
    }
//    如果一个数字将 1 到 n 的每个数字都使用且只使用了一次，我们将其称其为一个 n 位的
//    pandigital 数（也称为全数字）。例如，2143 是一个 4 位的 pandigital 数，并且是一个质数。
//    求最大的 n 位 pandigital 质数是多少？
//    答案：7652413
    public static void main(String[] args) {
        int maxnum=0;
        for(int i=1;i<=9;i++){
            int[] arr=new int[i];
            for(int j=1;j<=i;++j){
                arr[j-1]=j;
            }
            int endcount=1;
            for(int j=2;j<=i;++j)
                endcount*=j;
            for(int j=0;j<endcount;j++){
                change(arr);
                if(arr[i-1]%2==0)
                    continue;
                String temp="";
                for(int k=0;k<i;++k){
                    temp+=valueOf(arr[k]);
                }
                int endvalue=Integer.parseInt(temp);
                if(isPrime(endvalue)) {
                    if(pandigital(endvalue))
                        maxnum = Math.max(maxnum, endvalue);
                }
            }
        }
        System.out.println(maxnum);
    }
}
